package com.etime.shycourse.services.coupons.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.etime.shycourse.config.Tools;
import com.etime.shycourse.services.coupons.interfaces.CouponServices;
import com.etime.shycourse.dao.CouponMapper;
import com.etime.shycourse.dto.CouponTypesDto;
import com.etime.shycourse.dto.CurrentUser;
import com.etime.shycourse.pojo.Coupon;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 *
 * @author wb
 * @since 2022-03-15
 */
@Service
public class CouponServiceImpl implements CouponServices {
    @Autowired
    private Tools tools;
    @Autowired
    private CouponMapper mapper;

    /**
     * 后台
     * <p>
     * 创建优惠券
     *
     * @param coupon
     * @return Integer
     * 成功返回1 失败返回0
     */
    @Override
    public Integer insertCoupon(Coupon coupon, String token) {
        CurrentUser sysUser = tools.getCurrentUserFromRedis (token);
        // 判断用户存在
        if (sysUser == null || sysUser.getUser () == null) {
            return 0;
        }
        //优惠券创建时间
        coupon.setCouponcreatetime (new Date ());

        //打折券和抵扣券使用；兑换券默认值为1	   0--不限制	            1--限制
        if (coupon.getCouponcourseimpose () == null) {
            coupon.setCouponcourseimpose (1);
        }
        //优惠券发放数量  默认值：0
        if (coupon.getCouponsendcount () == null) {
            coupon.setCouponsendcount (0);
        }
        // 优惠券满多少可用 默认：0
        if (coupon.getCouponfull () == null) {
            coupon.setCouponfull (new BigDecimal (0));
        }
        //优惠券创建人
        coupon.setCouponcreateuserid (sysUser.getUser ().getUserid ());
        //优惠券创建人姓名
        String userName = null;
        if (sysUser.getUser ().getUsertruename () != null) {
            userName = sysUser.getUser ().getUsertruename ();
        }
        if (userName == null) {
            userName = sysUser.getUser ().getNickname ();
        }
        coupon.setCouponcreateuser (userName);
        // 1 创建未发布（不可用）
        //2 创建发布（可用）---发布后不可修改，但是可以关闭
        //3 关闭（不可继续领取，已领取的优惠券可以继续使用）--关闭后不可修改，不可重复打开
        // 优惠券状态
        coupon.setCouponstate (1);
        /*进行类型判断 过滤*/
        if (coupon.getCouponeffectivetype () != 2) {
            // 设置时间
            coupon.setCouponstart (null);
            coupon.setCouponend (null);
        }
        if (coupon.getCouponeffectivetype () != 1) {
            // 优惠券有效时长
            coupon.setCouponeffective (null);
        }
        return mapper.insert (coupon);
    }

    /**
     * 查询所有的优惠劵
     *
     * @param coupon   条件   可不传
     * @param pageNum, 第几页       可不传
     * @param pageSize 一页多少数据  可不传
     * @return Page<CouponTypesDto>
     */
    @Override
    public Page<CouponTypesDto> selectCouponPage(Coupon coupon, Long pageNum, Long pageSize) {
        Page<CouponTypesDto> page;
        if (pageNum != null & pageSize != null) {
            page = new Page<> (pageNum, pageSize);
        } else {
            page = new Page<> ();
        }
        return mapper.selectCouponTypesDtoPage (coupon, page);
    }

    /**
     * 根据优惠劵id进行修改
     *
     * @param coupon
     * @return int
     */
    @Override
    public Integer updateCouponById(Coupon coupon, String token) {
        CurrentUser sysUser = tools.getCurrentUserFromRedis (token);
        // 判断用户存在
        if (sysUser == null || sysUser.getUser () == null) {
            return 0;
        }
        coupon.setCouponupdateuserid (sysUser.getUser ().getUserid ());
        //优惠券创建人姓名
        String userName = null;
        if (sysUser.getUser ().getUsertruename () != null) {
            userName = sysUser.getUser ().getUsertruename ();
        }
        if (userName == null) {
            userName = sysUser.getUser ().getNickname ();
        }
        coupon.setCouponupdateuser (userName);
        // 优惠券最后修改时间
        coupon.setCouponupdatetime (new Date ());
        /*进行类型判断 过滤*/
        if (coupon.getCouponeffectivetype () != 2) {
            // 设置时间
            coupon.setCouponstart (null);
            coupon.setCouponend (null);
        }
        if (coupon.getCouponeffectivetype () != 1) {
            // 优惠券有效时长
            coupon.setCouponeffective (null);
        }
        return mapper.updateById (coupon);
    }

    @Override
    public Integer updateCouponByIds(Coupon coupon) {
        return mapper.updateById (coupon);
    }

    /**
     * 根据优惠劵id进行 添加优惠劵数量
     *
     * @param coupon
     * @return int
     */
    @Override
    public Integer updateCouponAddNumberById(Coupon coupon) {
        // 查询出结果
        Coupon data = mapper.selectById (coupon.getCouponid ());
        Integer couponcount = data.getCouponcount ();
        // 进行相加
        data.setCouponcount (couponcount + (int) coupon.getCouponcount ());
        return mapper.updateById (data);
    }

    /**
     * 按 ID 选择优惠券
     *
     * @param CouponID
     * @return Coupon
     */
    @Override
    public Coupon selectCouponById(Integer CouponID) {
        return mapper.selectById (CouponID);
    }

    /**
     * 查询所有的优惠劵 用活动管理的优惠劵展示
     * 条件：
     * 1、Couponstate = 2 创建发布状态
     * 2、优惠券的发放数量<总数量 或者总数量=0
     * 3、优惠劵类型 1、3、2（优惠券结束使用时间>活动结束时间）
     */
    @Override
    public List<Coupon> selectCouponList(Date activeend) {
        return mapper.selectByActivityList (activeend);
    }

}
